計畫新增兩個Model
第一個Model 儲存變數用
比如 name,age,tel
第二個Model 儲存第一個Model list
並且創造一些方法
讓controller 呼叫
以上都是我的構想
單存存一些變數
class ProductItemtMode: NSObject {
var foodName: String?
var cookTime: String?
}
//儲存
var userDefaults = UserDefaults.standard
userDefaults.set("Value", forKey: "Key")
userDefaults.synchronize()
//取值
userDefaults.value(forKey: "Key")
一開始用直接 Array存Model在存進UserDefault
但是直接崩潰 說資料格式不符合
上網查需要轉Data存?
錯誤代碼
2018-10-14 23:09:20.882490+0800 Chuhuo[24106:503054] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object (
"<Chuhuo.ProductItemtMode: 0x60000292d3e0>",
"<Chuhuo.ProductItemtMode: 0x60000292d3e0>"
) for key productList'
所以先轉Data 再變存進去
結果成功
封存
let data = NSData(bytes: &productList, length: productList.count) //Array 轉 Data
let encodedObject = NSKeyedArchiver.archivedData(withRootObject: data)
解開
let object = NSKeyedUnarchiver.unarchiveObject(with: decoded as Data)
就是一開始說得一樣
儲存第一個Model
以及有個func可以 儲存 讀取 資料
class ProductMode: NSObject {
func appendUserdefultTest(productMode: ProductItemtMode) {
var userDefaults = UserDefaults.standard
var productList = [ProductItemtMode]()
if (userDefaults.value(forKey: "productList") == nil){
//存取
productList.append(productMode)
let data = NSData(bytes: &productList, length: productList.count)
let encodedObject = NSKeyedArchiver.archivedData(withRootObject: data)
userDefaults.set(encodedObject, forKey: "productList")
userDefaults.synchronize()
//取出來
let decodedObject = userDefaults.data(forKey: "productList") as NSData?
if let decoded = decodedObject {
let object = NSKeyedUnarchiver.unarchiveObject(with: decoded as Data)
let data = object as? NSData
}
}
}
}
看似完美 轉換成data
print時是跟取出來是一樣的
證明讀與取的功能皆正常發揮
但是!!但是!!但是!!
我怎麼找都不知道怎麼把Data轉成
我一開始宣告的Array
var productList = [ProductItemtMode]()
真的是對Swift還不熟 沒辦法像OC變來變去
原本的productList可以直接
productList[0].foodName
去呼叫
但現在沒辦法啊啊啊啊啊
卡關了
只好繼續努力找找看了
如果真的找不到
我就要改用Sqlite
如果知道怎麼data轉換成我的var productList = ProductItemtMode
歡迎留言告訴我 謝謝
金魚也學得會的「KD指標」! 什麼是KD黃金交叉、KD死亡交叉 - 2021年